package com.jumi.microservice;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;

/**
 * Feign的源码实现的过程如下：
 * <p>
 * 1, 首先通过@EnableFeignCleints注解开启FeignCleint
 * 2, 根据Feign的规则实现接口，并加@FeignCleint注解
 * 3, 程序启动后，会进行包扫描，扫描所有的@FeignCleint的注解的类，并将这些信息注入到ioc容器中。
 * 4, 当接口的方法被调用，通过jdk的代理，来生成具体的RequestTemplate
 * 5, RequestTemplate在生成Request
 * 6, Request交给Client去处理，其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
 * 7, 最后Client被封装到LoadBalanceClient类，这个类结合类Ribbon做到了负载均衡
 * <p>
 * 在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册；通过@EnableFeignClients注解开启Feign的功能
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class CommentProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(CommentProviderApplication.class, args);
    }

    /**
     * 开启mbp的分页
     *
     * @return
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        return paginationInterceptor;
    }
}
